home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / ole2book.zip / CHAP11.ZIP / CHAP11 / HSCHMOO / HSCHMOO.H < prev    next >
C/C++ Source or Header  |  1993-06-23  |  8KB  |  243 lines

  1. /*
  2.  * HSCHMOO.H
  3.  * Schmoo Figure Handler Chapter 11
  4.  *
  5.  * Definitions and function prototypes for the Schmoo Handler.
  6.  *
  7.  * Copyright (c)1993 Microsoft Corporation, All Rights Reserved
  8.  *
  9.  * Kraig Brockschmidt, Software Design Engineer
  10.  * Microsoft Systems Developer Relations
  11.  *
  12.  * Internet  :  kraigb@microsoft.com
  13.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  14.  */
  15.  
  16.  
  17. #ifndef _HSCHMOO_H_
  18. #define _HSCHMOO_H_
  19.  
  20. #include <windows.h>
  21. #include <ole2.h>
  22. #include <classlib.h>
  23. #include <bookguid.h>
  24. #include <ipoly6.h>      //For POLYLINEDATA definitions
  25.  
  26.  
  27. #define HIMETRIC_PER_INCH           2540
  28.  
  29. //DLLSCHM.CPP
  30. class __far CFigureClassFactory : public IClassFactory
  31.     {
  32.     protected:
  33.         ULONG           m_cRef;         //Reference count on object
  34.  
  35.     public:
  36.         CFigureClassFactory(void);
  37.         ~CFigureClassFactory(void);
  38.  
  39.         //IUnknown members
  40.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  41.         STDMETHODIMP_(ULONG) AddRef(void);
  42.         STDMETHODIMP_(ULONG) Release(void);
  43.  
  44.         //IClassFactory members
  45.         STDMETHODIMP         CreateInstance(LPUNKNOWN, REFIID, LPVOID FAR *);
  46.         STDMETHODIMP         LockServer(BOOL);
  47.     };
  48.  
  49. typedef CFigureClassFactory FAR * LPCFigureClassFactory;
  50.  
  51.  
  52. //Type for an object-destroyed callback
  53. typedef void (FAR PASCAL *LPFNDESTROYED)(void);
  54.  
  55.  
  56. //Some magic number to add to aspects for returns from IViewObject::Freeze
  57. #define FREEZE_KEY_OFFSET       0x0723
  58.  
  59.  
  60. //HSCHMOO.CPP
  61. class __far CFigure : public IUnknown
  62.     {
  63.     //Make any contained interfaces your friends so they can get at privates
  64.     friend class CImpIOleObject;
  65.     friend class CImpIViewObject;
  66.     friend class CImpIPersistStorage;
  67.     friend class CImpIDataObject;
  68.     friend class CImpIAdviseSink;
  69.  
  70.     protected:
  71.         ULONG               m_cRef;         //Object reference count.
  72.         LPUNKNOWN           m_punkOuter;    //Controlling Unknown for aggregation
  73.         LPFNDESTROYED       m_pfnDestroy;   //Function to call on closure.
  74.  
  75.         POLYLINEDATA        m_pl;           //Our actual data.
  76.         UINT                m_cf;           //Object clipboard format.
  77.         CLSID               m_clsID;        //Current CLSID
  78.  
  79.         //These are default handler interfaces we use
  80.         LPUNKNOWN           m_pDefIUnknown;
  81.         LPOLEOBJECT         m_pDefIOleObject;
  82.         LPVIEWOBJECT        m_pDefIViewObject;
  83.         LPPERSISTSTORAGE    m_pDefIPersistStorage;
  84.         LPDATAOBJECT        m_pDefIDataObject;
  85.  
  86.         //Implemented interfaces
  87.         LPOLEOBJECT         m_pIOleObject;
  88.         LPVIEWOBJECT        m_pIViewObject;
  89.         LPPERSISTSTORAGE    m_pIPersistStorage;
  90.         LPADVISESINK        m_pIAdviseSink;
  91.  
  92.         //Advise sink we get in IViewObject
  93.         LPADVISESINK        m_pIAdvSinkView;
  94.         DWORD               m_dwAdviseFlags;
  95.         DWORD               m_dwAdviseAspects;
  96.         DWORD               m_dwFrozenAspects;
  97.  
  98.         //Copies of frozen aspects
  99.         POLYLINEDATA        m_plContent;
  100.         POLYLINEDATA        m_plThumbnail;
  101.  
  102.  
  103.     protected:
  104.         void      Draw(HDC, LPRECT, DWORD, DVTARGETDEVICE FAR *, HDC, LPPOLYLINEDATA);
  105.         void      PointScale(LPRECT, LPPOINT, BOOL);
  106.  
  107.     public:
  108.         CFigure(LPUNKNOWN, LPFNDESTROYED, HINSTANCE);
  109.         ~CFigure(void);
  110.  
  111.         BOOL      FInit(void);
  112.  
  113.         //Non-delegating object IUnknown
  114.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  115.         STDMETHODIMP_(ULONG) AddRef(void);
  116.         STDMETHODIMP_(ULONG) Release(void);
  117.     };
  118.  
  119. typedef CFigure FAR * LPCFigure;
  120.  
  121.  
  122.  
  123. class __far CImpIPersistStorage : public IPersistStorage
  124.     {
  125.     protected:
  126.         ULONG               m_cRef;      //Interface reference count.
  127.         LPCFigure           m_pObj;      //Back pointer to the object.
  128.         LPUNKNOWN           m_punkOuter; //Controlling unknown for delegation.
  129.  
  130.     public:
  131.         CImpIPersistStorage(LPCFigure, LPUNKNOWN);
  132.         ~CImpIPersistStorage(void);
  133.  
  134.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  135.         STDMETHODIMP_(ULONG) AddRef(void);
  136.         STDMETHODIMP_(ULONG) Release(void);
  137.  
  138.         STDMETHODIMP GetClassID(LPCLSID);
  139.  
  140.         STDMETHODIMP IsDirty(void);
  141.         STDMETHODIMP InitNew(LPSTORAGE);
  142.         STDMETHODIMP Load(LPSTORAGE);
  143.         STDMETHODIMP Save(LPSTORAGE, BOOL);
  144.         STDMETHODIMP SaveCompleted(LPSTORAGE);
  145.         STDMETHODIMP HandsOffStorage(void);
  146.     };
  147.  
  148.  
  149.  
  150. class __far CImpIOleObject : public IOleObject
  151.     {
  152.     private:
  153.         ULONG           m_cRef;         //Interface reference count.
  154.         LPCFigure       m_pObj;         //Back pointer to the object.
  155.         LPUNKNOWN       m_punkOuter;    //Controlling unknown for delegation
  156.  
  157.     public:
  158.         CImpIOleObject(LPCFigure, LPUNKNOWN);
  159.         ~CImpIOleObject(void);
  160.  
  161.         //IUnknown members that delegate to m_punkOuter.
  162.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  163.         STDMETHODIMP_(ULONG) AddRef(void);
  164.         STDMETHODIMP_(ULONG) Release(void);
  165.  
  166.         //IOleObject members
  167.         STDMETHODIMP SetClientSite(LPOLECLIENTSITE);
  168.         STDMETHODIMP GetClientSite(LPOLECLIENTSITE FAR *);
  169.         STDMETHODIMP SetHostNames(LPCSTR, LPCSTR);
  170.         STDMETHODIMP Close(DWORD);
  171.         STDMETHODIMP SetMoniker(DWORD, LPMONIKER);
  172.         STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER FAR *);
  173.         STDMETHODIMP InitFromData(LPDATAOBJECT, BOOL, DWORD);
  174.         STDMETHODIMP GetClipboardData(DWORD, LPDATAOBJECT FAR *);
  175.         STDMETHODIMP DoVerb(LONG, LPMSG, LPOLECLIENTSITE, LONG, HWND, LPCRECT);
  176.         STDMETHODIMP EnumVerbs(LPENUMOLEVERB FAR *);
  177.         STDMETHODIMP Update(void);
  178.         STDMETHODIMP IsUpToDate(void);
  179.         STDMETHODIMP GetUserClassID(CLSID FAR *);
  180.         STDMETHODIMP GetUserType(DWORD, LPSTR FAR *);
  181.         STDMETHODIMP SetExtent(DWORD, LPSIZEL);
  182.         STDMETHODIMP GetExtent(DWORD, LPSIZEL);
  183.         STDMETHODIMP Advise(LPADVISESINK, DWORD FAR *);
  184.         STDMETHODIMP Unadvise(DWORD);
  185.         STDMETHODIMP EnumAdvise(LPENUMSTATDATA FAR *);
  186.         STDMETHODIMP GetMiscStatus(DWORD, DWORD FAR *);
  187.         STDMETHODIMP SetColorScheme(LPLOGPALETTE);
  188.     };
  189.  
  190.  
  191. class __far CImpIViewObject : public IViewObject
  192.     {
  193.     private:
  194.         ULONG           m_cRef;         //Interface reference count.
  195.         LPCFigure       m_pObj;         //Back pointer to the object.
  196.         LPUNKNOWN       m_punkOuter;    //Controlling unknown for delegation
  197.  
  198.     public:
  199.         CImpIViewObject(LPCFigure, LPUNKNOWN);
  200.         ~CImpIViewObject(void);
  201.  
  202.         //IUnknown members that delegate to m_punkOuter.
  203.         STDMETHODIMP         QueryInterface(REFIID, LPVOID FAR *);
  204.         STDMETHODIMP_(ULONG) AddRef(void);
  205.         STDMETHODIMP_(ULONG) Release(void);
  206.  
  207.         //IViewObject members
  208.         STDMETHODIMP Draw(DWORD, LONG, LPVOID, DVTARGETDEVICE FAR *, HDC, HDC
  209.             , const LPRECTL, const LPRECTL, BOOL (CALLBACK *)(DWORD), DWORD);
  210.         STDMETHODIMP GetColorSet(DWORD, LONG, LPVOID, DVTARGETDEVICE FAR *
  211.             , HDC, LPLOGPALETTE FAR *);
  212.         STDMETHODIMP Freeze(DWORD, LONG, LPVOID, LPDWORD);
  213.         STDMETHODIMP Unfreeze(DWORD);
  214.         STDMETHODIMP SetAdvise(DWORD, DWORD, LPADVISESINK);
  215.         STDMETHODIMP GetAdvise(LPDWORD, LPDWORD, LPADVISESINK FAR *);
  216.     };
  217.  
  218.  
  219. class __far CImpIAdviseSink : public IAdviseSink
  220.     {
  221.     protected:
  222.         ULONG           m_cRef;         //Interface reference count.
  223.         LPCFigure       m_pObj;         //Back pointer to the object.
  224.         LPUNKNOWN       m_punkOuter;    //Controlling unknown for delegation.
  225.  
  226.     public:
  227.         CImpIAdviseSink(LPCFigure, LPUNKNOWN);
  228.         ~CImpIAdviseSink(void);
  229.  
  230.         STDMETHODIMP QueryInterface(REFIID, LPVOID FAR *);
  231.         STDMETHODIMP_(ULONG) AddRef(void);
  232.         STDMETHODIMP_(ULONG) Release(void);
  233.  
  234.         STDMETHODIMP_(void)  OnDataChange(LPFORMATETC, LPSTGMEDIUM);
  235.         STDMETHODIMP_(void)  OnViewChange(DWORD, LONG);
  236.         STDMETHODIMP_(void)  OnRename(LPMONIKER);
  237.         STDMETHODIMP_(void)  OnSave(void);
  238.         STDMETHODIMP_(void)  OnClose(void);
  239.     };
  240.  
  241.  
  242. #endif  //_HSCHMOO_H_
  243.